package com.isaiah.algorithms.sort;

import java.util.Arrays;

/**
 * @Title: 冒泡排序
 * @Description:
 * @author: Haijun
 * @emial: isaiah@sohu.com
 * @date 2021/10/2609:38
 */
public class BubbleSort {

    public static <T>  void sort(Comparable<T>[] arr){
        // 遍历每个一轮（从后向前遍历）
        for (int i = arr.length-1; i > 0; i--){

            // 对每一轮进行冒泡（从前后遍历）
            for (int j = 0; j < i; j++){
                // 如果前一个元素比后一个元素大，则交换位置
                if (greater(arr[j], arr[j+1])){
                    swap(arr, j, j+1);
                }
            }
        }
    }

    /**
     * 判断a是否大于b
     * @param a
     * @param b
     * @param <T>
     * @return
     */
    private static <T> boolean greater(Comparable<T> a, Comparable<T> b){
        return a.compareTo((T) b) > 0;
    }

    /**
     * 交换数组arr的i索引与j索引上的元素
     * @param arr
     * @param i
     * @param j
     * @param <T>
     */
    private static <T> void  swap(Comparable<T>[] arr, int i, int j){
        Comparable<T> temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;

    }

    public static void main(String[] args) {
        Integer[] arr = {4, 5, 6, 3, 2, 1};
        System.out.println(Arrays.toString(arr));
        sort(arr);
        System.out.println(Arrays.toString(arr));
    }
}
